package com.b1.taskmanagerclient.start.gui;

import com.b1.taskmanagerclient.connect.Client;
import java.awt.AWTError;
import java.awt.Dimension;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.*;

/**
 * класс окна изменения задачи\контакта
 * @author Exoo
 */

public class ChangeWindow extends JFrame
{
    private static final org.apache.log4j.Logger log = org.apache.log4j.Logger.getLogger(ChangeWindow.class);
    private JButton button;             // кнопка применения изменений
    private JPanel panel;               // понель окна
    private JLabel label;               // заголовки полей
    private JLabel label3;              // поле хрянщее id контакта
    private JComboBox comboContacts;    // комбобокс с контактами
    private JTextField textField1;      // поле для ввода такста
    private JTextField textField2;      // поле для ввода такста
    private JTextField textField3;      // поле для ввода такста
    private JTextField textField4;      // поле для ввода такста
    private JTextArea textArea;         // поле для ввода такста
    private JRadioButton radioMeeting;  //радио кнопка выбора типа встречи
    private JRadioButton radioMemo;     //радио кнопка выбора типа встреч
    private String contactArray[][];    // список контактов
    private Client client;              // клиент текщего подключения
    private int globalId;               // id контакта или задачи для редактирования
    private JFrame oldWindow;           // родительское окно из которого последовал вызов данного окна
    
    /**
     * Конструктор класса
     * определяет тип окна для изменения
     * i = 0 изменение задач
     * i = 1 изменени контакта
     * получает клинтское подключение
     * и окно родитель
     */
    public ChangeWindow(int i,int id, Client data,final JFrame window) 
    {
        super("Change");
        this.oldWindow = window;
        this.addWindowListener(new java.awt.event.WindowAdapter()
        {
            /*
             * слушатель закрытия окна
             * вызывает окно родитель
             */
            public void windowClosing(java.awt.event.WindowEvent event) 
            {
                window.setVisible(true);
            }
        });
        globalId = id;
        client = data;
        contactArray = client.getContactList();
        switch(i)
        {
            case 0:
                changeTask();
                break;
            case 1:
                changeContact();
                break;
        }       
        
    }
    
    /**
     * метод добавления лейбла в окно
     * @param name  - имя лейбла
     * @param positionX - позиция по оси х
     * @param positionY - позиция по оси Y
     * @param width - ширина
     * @param height  - высота
     */
    private void addLabel(String name,int positionX, int positionY,int width,int height)
    {
        JLabel label  = new JLabel(name);
        label.setSize(width,height);
        label.setLocation(positionX, positionY);
        panel.add(label);
    }
    
    /**
     * метод прорисовки окна изменения задачи
     */
    private void changeTask()
    {
        this.setTitle("Change Task");
        this.setSize(300, 400);
        try 
        {
            java.awt.Toolkit jToolkit = java.awt.Toolkit.getDefaultToolkit();
            Dimension screenSize = jToolkit.getScreenSize();
            this.setLocation((int) (screenSize.getWidth()/4), (int) (screenSize.getHeight()/4));
        } 
        catch (AWTError ex) 
        {
            log.error(ChangeWindow.class.getName(), ex);
        }
        this.setResizable(false);
        this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        panel = new JPanel();
        panel.setLayout(null);
        
        final String changeTask[] =client.getTaskList()[globalId]; 

        addLabel("Title Task", 20, 10, 60, 14);   
        textField1 = new JTextField();
        textField1.setSize(100,20);
        textField1.setLocation(20,25);
        textField1.setName("Title");
        textField1.setText(changeTask[3]);
        panel.add(textField1);
        
        addLabel("Change contact",150,10,90,14);
        label3 = new JLabel();
        label3.setText(changeTask[6]);
        
        // добавлние списка контактов в комбобокс
        // имя контакта - ключ
        final java.util.HashMap<String, String> contactMap = new java.util.HashMap<String, String>();
        int contactId = 0;
        for (int i = 0; i < contactArray.length; i++)
        {
            contactMap.put(contactArray[i][1],contactArray[i][0]);
            if(!contactArray[i][0].equals(changeTask[6])) continue;
            contactId=i;
            
        }
        java.util.Set<String> myset = contactMap.keySet();
        comboContacts = new JComboBox((String[]) myset.toArray(new String[myset.size()]));
        comboContacts.setSize(100,20);
        comboContacts.setLocation(150,25);
        comboContacts.setSelectedItem(contactArray[contactId][1]);
        comboContacts.addActionListener(new java.awt.event.ActionListener() 
        {
            /*
             * слушатель выбора контакта. его id записывается в labelContactId
             */
            public void actionPerformed(java.awt.event.ActionEvent e) 
            {
                JComboBox box = (JComboBox) e.getSource();
                String item = contactMap.get((String) box.getSelectedItem());
                label3 = new JLabel();
                label3.setText(item);
            }
        });
        panel.add(comboContacts);
        
        addLabel("Date begin", 20, 50, 60, 14);
        addLabel("Date end", 120, 50, 60, 14);
        
        textField2 = new JTextField();
        textField2.setSize(100,20);
        textField2.setLocation(20,65);
        textField2.setName("Begin Date");
        textField2.setText(changeTask[1]);
        panel.add(textField2);
        
        textField4 = new JTextField();
        textField4.setSize(100,20);
        textField4.setLocation(120,65);
        textField4.setName("End Date");
        textField4.setText(changeTask[2]);
        panel.add(textField4);
        
        addLabel("Description", 20, 90, 80, 14);
        textArea = new JTextArea();
        textArea.setSize(200,80);
        textArea.setLocation(20,105);
        textArea.setName("Description");
        textArea.setText(changeTask[7]);
        javax.swing.border.Border br = new javax.swing.plaf.metal.MetalBorders.TextFieldBorder();
        textArea.setBorder(br);
        panel.add(textArea);        
        
        label  = new JLabel("Place");
        label.setSize(50,14);
        label.setLocation(20, 220);
        textField3 = new JTextField();
        textField3.setSize(100,20);
        textField3.setLocation(20,235);
        textField3.setName("Place");
 
        textField3.setText(changeTask[5]);
        label.setVisible(false);
        textField3.setVisible(false);
        panel.add(label);
        panel.add(textField3);
        
        // добавление группы кнопок выбора типа встречи
        ButtonGroup bGroup = new ButtonGroup();
        radioMeeting = new JRadioButton("Meeting");
        radioMeeting.setSize(80, 14);
        radioMeeting.setLocation(20, 200);
        radioMeeting.addActionListener(new java.awt.event.ActionListener() 
        {
            /*
             * слушатель выбора группы радио кнопок
             */
            public void actionPerformed(java.awt.event.ActionEvent e) 
            {
                if (radioMeeting.isEnabled()) 
                {
                    label.setVisible(true);
                    textField3.setVisible(true);
                }
            }
        });
        radioMemo = new JRadioButton("Memo");
        radioMemo.setLocation(100, 200);
        radioMemo.setSize(90, 14);
        radioMemo.addActionListener(new java.awt.event.ActionListener() 
        {
            /*
             * слушатель выбора группы радио кнопок
             */
            public void actionPerformed(java.awt.event.ActionEvent e)
            {
                if (radioMemo.isEnabled()) 
                {
                    label.setVisible(false);
                    textField3.setVisible(false);
                }
            }
        });
        bGroup.add(radioMeeting);
        bGroup.add(radioMemo);
        panel.add(radioMeeting);
        panel.add(radioMemo);
        if(changeTask[4].equals("meeting")) 
        {
            radioMeeting.setSelected(true);
            textField3.setVisible(true);
        }
        else radioMemo.setSelected(true);
        
        button = new JButton("Change Task");
        button.setLocation(20,270);
        button.setSize(135,40);
        button.addActionListener(new java.awt.event.ActionListener()
        {
            /*
             * слушатель кнопки изменения
             * задача обновляется в существующем массиве задач
             * и осуществляется передача обновленного массива клиенту
             * для отправки его серверу
             * данное окно закрывается и появляется окно родитель
             */
            public void actionPerformed(java.awt.event.ActionEvent e) 
            {
                String type = "memo";
                if (radioMeeting.hasFocus()) 
                {
                    type = "meeting";
                    textField3.setText("-");
                }
                String newTask[] = {
                    changeTask[0],
                    textField2.getText(),
                    textField4.getText(),
                    textField1.getText(),
                    type,
                    textField3.getText(),
                    label3.getText(),
                    textArea.getText()
                };
                String taskList[][]=client.getTaskList();
                for (int i = 0; i < taskList.length; i++) 
                {
                    if(!taskList[i][0].equals(newTask[0]))continue;
                    taskList[i]=newTask;
                    break;
                }
                client.setTaskList(taskList);
                oldWindow.setVisible(true);
                dispose();
            }
        });
        panel.add(button);
        this.setContentPane(panel);
    }
    
    /**
     * метод прорисовки окна добавления контакта
     */
    private void changeContact()
    {
        this.setTitle("Change Contact");
        this.setSize(300, 200);        
        try 
        {
            java.awt.Toolkit jToolkit = java.awt.Toolkit.getDefaultToolkit();
            Dimension screenSize = jToolkit.getScreenSize();
            this.setLocation((int) (screenSize.getWidth()/4), (int) (screenSize.getHeight()/4));
        } 
        catch (AWTError ex) 
        {
            log.error(ChangeWindow.class.getName(), ex);
        }
        this.setResizable(false);
        this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        panel = new JPanel();
        panel.setLayout(null);
        
        addLabel("First name", 20,10, 80, 14);
        textField1 = new JTextField();
        textField1.setSize(100,20);
        textField1.setLocation(20,25);
        textField1.setName("first name");
        textField1.setText(contactArray[globalId][1]);
        panel.add(textField1);
        
        addLabel("Last name", 20,50, 60, 14);
        textField2 = new JTextField();
        textField2.setSize(100,20);
        textField2.setLocation(20,65);
        textField2.setName("last name");
        textField2.setText(contactArray[globalId][2]);
        panel.add(textField2);

        addLabel("Phone", 20,90, 80, 14);
        textArea = new JTextArea();
        textArea.setSize(80,20);
        textArea.setLocation(20,105);
        textArea.setName("phone");
        javax.swing.border.Border br = new javax.swing.plaf.metal.MetalBorders.TextFieldBorder();
        textArea.setBorder(br);
        textArea.setText(contactArray[globalId][3]);
        panel.add(textArea);        
        
        button = new JButton("Change contact");
        button.setLocation(140,20);
        button.setSize(140,40);
        button.addActionListener(new java.awt.event.ActionListener()
        {
            /*
             * слушатель кнопки изменения
             * контакт  обновляется в существующем массиве контактов
             * и осуществляется передача обновленного массива клиенту
             * для отправки его серверу
             * данное окно закрывается и появляется окно родитель
             */
            public void actionPerformed(java.awt.event.ActionEvent e) 
            {
                contactArray[globalId][1] =  textField1.getText();
                contactArray[globalId][2] = textField2.getText();
                contactArray[globalId][3] = textArea.getText();
                client.setContactList(contactArray);
                oldWindow.setVisible(true);
                dispose();
            }
        });
        panel.add(button);
        this.setContentPane(panel);
    }
}
